/**
 * @file main.c
 * @author 申飞麟
 * @brief 主程序
 * @date 2025.1.31
 */

#include <stdio.h>
#include <stdlib.h>
#include <stdint.h>
#include "DynamicArray.h"

int main(void)
{
    DynamicArray Test;            ///< 动态数组Test
    DynamicArray OverFlow;        ///< 保存溢出数据的动态数组OverFlow
    DynamicArrayCreate(&Test, 5); // 动态数组初始化
    DynamicArrayCreate(&OverFlow, 5);
    int32_t *Read = NULL;                      ///< 整型读取指针Read
    Read = (int32_t *)malloc(sizeof(int32_t)); // 内存分配
    if (Read == NULL)                          // 判断指针是否为空
    {
        fprintf(stderr, "内存分配失败");
        return DYNAMICARRAY_ERROR_NOMALLOC;
    }

    printf("Test数组为: \t");
    for (int32_t i = 0; i < 5; i++) // Test数组内填入数字
    {
        DynamicArraySet(&Test, i, i + 1);
        printf("%" PRId32 "\t", Test.pdata[i]);
    }
    printf("\n");

    DynamicArraySet(&Test, 3, 5); // Test数组第四位变为 5
    printf("第四位变为 5 后, Test数组为: \t");
    DynamicArrayTraverse(&Test); // 遍历数组

    DynamicArrayGet(&Test, 1, Read); // Read指针读取Test数组的第二位
    printf("Read指针读取Test数组的第二位为: \t%" PRId32 "\n", *Read);
    free(Read);
    Read = NULL;

    DynamicArrayAddStart(&Test, 0); // Test数组开头插入数字 0
    printf("Test数组开头插入数字 0 后, 数组变为: \t");
    DynamicArrayTraverse(&Test);

    DynamicArrayAddEnd(&Test, 6); // Test数组末尾插入数字 6
    printf("Test数组末尾插入数字 6 后, 数组变为: \t");
    DynamicArrayTraverse(&Test);

    DynamicArrayChange(&Test, 10, NULL); // 延长数组长度为 10
    printf("延长数组长度为 10 后, Test数组变为: \t");
    DynamicArrayTraverse(&Test);
    // printf("延长数组长度为 10 后, OverFlow数组变为: \t");
    // DynamicArrayTraverse(&OverFlow);

    DynamicArrayChange(&Test, 3, NULL); // 缩短数组长度为 3, 但不保存溢出的数据
    printf("缩短数组长度为 3, 但不保存溢出的数据后, Test数组变为: \t");
    DynamicArrayTraverse(&Test);
    // printf("缩短数组长度为 3, 但不保存溢出的数据后, OverFlow数组变为: \t");
    // DynamicArrayTraverse(&OverFlow);

    DynamicArrayChange(&Test, 0, &OverFlow); // 再次缩短数组长度为 0, 保存溢出的数据
    printf("再次缩短数组长度为 0, 保存溢出的数据后, Test数组变为: \t");
    DynamicArrayTraverse(&Test);
    printf("再次缩短数组长度为 0, 保存溢出的数据后, OverFlow数组变为: \t");
    DynamicArrayTraverse(&OverFlow);

    DynamicArrayDelete(&OverFlow); // 清空OVerFlow数组

    system("pause");
}
